From 1df62f4d15c5a519fa72507c3af899c4c7d34369 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Thu, 4 Jan 2001 12:53:14 +0000 Subject: [PATCH] (Fdelete_other_windows): Set window's window_end_valid to nil when changing the window's start. Don't change the window's start when its top position hasn't changed. If we do, this will set the window's optional_new_start, which act's like a force_start during redisplay with C-x 1 M-> under particular circumstances (see report from Per Starback to emacs-pretest-bug from 2000-12-13.). (Fdelete_other_windows): Set window's window_end_valid to nil when changing the window's start. --- src/window.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/window.c b/src/window.c index 5d779026bad..16455f59220 100644 --- a/src/window.c +++ b/src/window.c @@ -1691,8 +1691,7 @@ window_list_1 (window, minibuf, all_frames) Qnil, look at just the selected frame; Qvisible, look at visible frames; a frame, just look at windows on that frame. - If MINI is non-zero, perform the operation on minibuffer windows too. -*/ + If MINI is non-zero, perform the operation on minibuffer windows too. */ enum window_loop { @@ -1989,13 +1988,12 @@ value is reasonable when this function is called.") { struct window *w; int startpos; - int top; + int top, new_top; if (NILP (window)) window = selected_window; else CHECK_LIVE_WINDOW (window, 0); - w = XWINDOW (window); startpos = marker_position (w->start); @@ -2011,7 +2009,9 @@ value is reasonable when this function is called.") on the frame. But don't try to do this if the window start is outside the visible portion (as might happen when the display is not current, due to typeahead). */ - if (startpos >= BUF_BEGV (XBUFFER (w->buffer)) + new_top = XFASTINT (w->top) - FRAME_TOP_MARGIN (XFRAME (WINDOW_FRAME (w))); + if (new_top != top + && startpos >= BUF_BEGV (XBUFFER (w->buffer)) && startpos <= BUF_ZV (XBUFFER (w->buffer))) { struct position pos; @@ -2023,6 +2023,7 @@ value is reasonable when this function is called.") pos = *vmotion (startpos, -top, w); set_marker_both (w->start, w->buffer, pos.bufpos, pos.bytepos); + w->window_end_valid = Qnil; w->start_at_line_beg = ((pos.bytepos == BEGV_BYTE || FETCH_BYTE (pos.bytepos - 1) == '\n') ? Qt : Qnil); -- 2.30.2